package com.zenithmind.common.security;

import java.util.List;

/**
 * 基于角色的访问控制接口
 * 遵循接口隔离原则：专门处理角色相关的访问控制
 */
public interface RoleBasedAccessControl {
    
    /**
     * 获取需要特定角色的路径匹配规则
     *
     * @return 角色路径规则
     */
    List<SecurityRule> getRoleBasedRules();
    
    /**
     * 获取路径所需角色
     *
     * @param path 请求路径
     * @param method HTTP方法
     * @return 所需角色列表，如果不限制角色则返回null
     */
    List<String> getRequiredRoles(String path, String method);
    
    /**
     * 添加角色规则
     *
     * @param pathPattern 路径模式
     * @param roles 所需角色列表
     */
    void addRoleRule(String pathPattern, List<String> roles);
    
    /**
     * 添加角色规则
     *
     * @param pathPattern 路径模式
     * @param httpMethod HTTP方法
     * @param roles 所需角色列表
     */
    void addRoleRule(String pathPattern, String httpMethod, List<String> roles);
    
    /**
     * 移除角色规则
     *
     * @param pathPattern 路径模式
     */
    void removeRoleRule(String pathPattern);
    
    /**
     * 检查用户是否具有访问权限
     *
     * @param path 请求路径
     * @param method HTTP方法
     * @param userRoles 用户角色列表
     * @return 是否有权限
     */
    boolean hasPermission(String path, String method, List<String> userRoles);
}
